class MessageQueue {
  constructor() {
    // 消息队列
    this.messageQueue = []
    // 是否处于发送状态
    this.sending = false
    // 回调函数
    this.handlerFn = null
  }

  //  将消息推进消息队列
  receiveMessage(message) {
    this.messageQueue.push(message)
    if (this.sending === false) this.processMessages()
  }

  //  设置回调函数
  setHandlerFn(_handlerFn) {
    this.handlerFn = _handlerFn
  }

  processMessages() {
    if (this.messageQueue.length > 0) {
      if (this.handlerFn) {
        // 将消息队列第一个消息删除提取出来
        const message = this.messageQueue.shift()
        this.sending = true
        this.handlerFn(message) // 调用回调函数
      }

      // 递归调用以继续处理下一条消息
      setTimeout(() => this.processMessages(), 200)
    } else this.sending = false
  }
}

export default MessageQueue
